package org.ch02.test00.demo01;

import org.ch02.entity.Student;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author ZQX
 * @date 2025-03-19
 */

/**
 * 二、通过反射获取类的构造方法，如下所示：
 * public Student(String name,int age,Double weight)
 *
 * 使用反射实例化此类的对象，调用 show 方法，
 * show 方法把上面构造方法的三个参数信息打印输出。
 */
public class MainTest {
    public static void main(String[] args) throws Exception {

        // 第一：获取操作类的 Class 对象
        Class<Student> studentClass = Student.class;
        // 第二：基于 Class 对象，实现相关的操作
        // 1.获取构造方法对象
        Constructor<Student> constructor = studentClass.getConstructor(String.class, int.class, double.class);

        // 2.使用构造方法对象实例化学生对象
        Student student = constructor.newInstance("A", 12, 30);

        // 3.获取 show 方法对象
        Method show = studentClass.getDeclaredMethod("show");

        // 4.调用方法
        Object invoke = show.invoke(student);
    }
}
